package com._520it.day2._06_template;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;


//单个对象的结果及处理器，一行数据封装成一个对象
//处理多行数据的，就封装到List集合中
public class BeanListHandler<T> implements IResultSetHandler<List<T>>{

	private Class<T> clazz;
	
	
	public BeanListHandler(Class<T> clazz) {
		super();
		this.clazz = clazz;
	}


	@Override
	public List<T> handle(ResultSet rs) throws SQLException {
		List<T> list = new ArrayList<>();
		try {
			T obj = clazz.newInstance();
			//得到某一份字节中所有的信息（方法/属性/事件）
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz,Object.class);
			//获取该对象中所有的属性
			PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
			while (rs.next()) {
				for (PropertyDescriptor pd : pds) {
					String columnName = pd.getName();
					Object value = rs.getObject(columnName);
					//调用该属性对象的setter方法
					pd.getWriteMethod().invoke(obj, value);
					
				}		
			}
			list.add(obj);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return list;
	}

	public static void main(String[] args) {
		
	}
}
